package anji.plus.system.mark.response;

/**
 * <p>
 * 统一返回状态码
 * </p>
 *
 * @author zag
 * @since 2023/7/14
 */
public enum ResponseCode {

    /**
     * 未知错误
     */
    UNKNOWN(-1, "未知错误"),
    SYSTEM_UNKNOWN(-2, "系统维护中，请稍候！"),

    /**
     * 请求成功
     */
    SUCCESS(20000, "成功"),
    UPDATE_SUCCESS(20000, "修改成功"),
    DEL_SUCCESS(20000, "删除成功"),
    SAVE_SUCCESS(20000, "保存成功"),

    /**
     * 请求成功
     */
    FAILURE(20001, "失败"),
    UPDATE_FAILURE(20001, "修改失败"),
    DEL_FAILURE(20001, "删除失败"),
    SAVE_FAILURE(20001, "保存失败"),


    // -----------------------------------参数错误：10001-19999 start

    /**
     * 参数无效
     */
    PARAM_IS_INVALID(10001, "参数无效"),

    /**
     * 参数为空
     */
    PARAM_IS_BLANK(10002, "参数为空"),

    /**
     * 参数类型错误
     */
    PARAM_TYPE_BIND_ERROR(10003, "参数类型错误"),

    /**
     * 参数缺失
     */
    PARAM_NOT_COMPLETE(10004, "参数缺失"),

    // -----------------------------------参数错误：10001-19999 end

    // -----------------------------------用户错误：20002-29999 start
    /**
     * 用户未登录
     */
    USER_NOT_LOGGED_IN(20003, "用户未登录"),

    /**
     * 账户不存在或密码错误
     */
    USER_LOGIN_ERROR(20004, "账户不存在或密码错误"),

    /**
     * 账号已被禁用
     */
    USER_ACCOUNT_FORBIDDEN(20005, "账号已被禁用"),

    /**
     * 用户不存在
     */
    USER_NOT_EXIST(20006, "用户不存在"),

    /**
     * 用户已存在
     */
    USER_HAS_EXIST(20007, "用户已存在"),
    /**
     * 昵称已存在
     */
    USER_NICE_HAS_EXIST(20008, "昵称已存在"),
    /**
     * 邮箱已存在
     */
    USER_EMAIL_HAS_EXIST(20009, "邮箱已存在"),
    /**
     * 邮箱激活失败
     */
    USER_EMAIL_ACTIVAION_FAILURE(20010, "邮箱激活失败"),
    /**
     * 邮箱尚未激活
     */
    USER_EMAIL_FORBIDDEN(20011, "邮箱尚未激活"),
    /**
     * 邮箱不存在
     */
    USER_EMAIL_NOT_EXIST(20012, "邮箱不存在"),
    /**
     * 邮箱地址错误
     */
    USER_EMAIL_ERROR(20013, "邮箱地址错误"),
    /**
     * 用户不存在或验证码错误
     */
    USER_RESET_ERROR(20014, "用户不存在或验证码错误"),

    /**
     * 用户被禁用
     */
    User_DISABLED(20015, "用户被禁用"),

    /**
     * 用户被禁用
     */
    PHONE_DISABLED(20016, "手机号已存在"),

    /**
     * 用户被删除
     */
    USER_DELETE(20017,"用户已删除"),

    /**
     * 微信未绑定
     */
    UN_WECHAT_USER_BIND(20018,"微信未绑定"),

    // -----------------------------------用户错误：20001-29999 end
    // -----------------------------------业务错误：30001-39999 start

    /**
     * 用户不存在或验证码错误
     */
    SPECIFIED_QUESTIONED_USER_NOT_EXIST(30001, "业务系统中用户不存在"),


    // -----------------------------------业务错误：30001-39999 end

    // -----------------------------------系统错误：40001-49999 start
    /**
     * 系统繁忙，请稍后重试
     */
    SYSTEM_INNER_ERROR(40001, "系统繁忙，请稍后重试"),

    /**
     * 系统Token无效
     */
    SYSTEM_TOKEN_ERROR(40002, "系统Token错误"),
    /**
     * 系统Token无效
     */
    SYSTEM_INVALID_TOKEN(40003, "系统Token失效"),

    SYSTEM_UNAUTHORIZED(40004, "系统Token失效"),

    SYSTEM_OAUTH(40005, "系统认证异常"),

    CLIENT_AUTHENTICATION_FAILED(40006,"客户端认证失败"),

    SYSTEM_UNSUPPORTED_GRANT_TYPE(40007, "不支持的认证模式"),
    /**dubbo通信异常*/
    SYSTEM_RPC(40008, "服务通信异常"),
    // -----------------------------------系统错误：40001-49999 end

    // -----------------------------------数据错误：50001-59999 start
    RESULT_DATA_EXE(50001, "长度超过限制"),
    /**
     * 数据未找到
     */
    RESULT_DATA_NONE(50001, "数据未找到"),

    /**
     * 项目未绑定设备
     */
    NO_DEVICE(50001, "暂无数据,请绑定设备"),
    /**
     * 数据有误
     */
    DATA_IS_WRONG(50002, "数据有误"),
    /**
     * 数据已存在
     */
    DATA_ALREADY_EXISTED(50003, "数据已存在"),
    /**
     * 数据过大
     */
    DATA_IS_LARGE(50004, "数据过大"),
    /**
     * 仅支持 png jpg jpeg gif bmp webp 类型图片
     */
    IMAGE_DATA_IS_WRONG(50005, "仅支持 png jpg jpeg gif bmp webp 类型图片"),

    /**
     * 图片转化失败
     */
    IMAGE_transform_WRONG(50006, "图片转化失败"),
    /**
     * 图片转化失败
     */
    IMAGE_UPLOAD_WRONG(50007, "图片上传失败"),
    /**
     * 图片转化失败
     */
    IMAGE_CREATE_WRONG(50008, "图片生成失败"),


    /**
     * 数据事务异常
     */
    MYSQL_TRANSIENT(50012, "数据事务异常"),

    // -----------------------------------数据错误：50001-59999 end

    // -----------------------------------接口错误：60001-69999 start
    /**
     * 内部系统接口调用异常
     */
    INTERFACE_INNER_INVOKE_ERROR(60001, "内部系统接口调用异常"),

    /**
     * 外部系统接口调用异常
     */
    INTERFACE_OUTER_INVOKE_ERROR(60002, "外部系统接口调用异常"),
    /**
     * 该接口禁止访问
     */
    INTERFACE_FORBID_VISIT(60003, "该接口禁止访问"),
    /**
     * 接口地址无效
     */
    INTERFACE_ADDRESS_INVALID(60004, "接口地址无效"),
    /**
     * 接口请求超时
     */
    INTERFACE_REQUEST_TIMEOUT(60005, "接口请求超时"),

    /**
     * 接口负载过高
     */
    INTERFACE_EXCEED_LOAD(60006, "接口负载过高"),

    /**
     * 内部系统接口调用异常
     */
    NO_PERMISSION(80001, "项目权限过期,请联系管理员"),
    // -----------------------------------数据错误：60001-69999 end

    // -----------------------------------权限错误：70001-79999 start
    /**
     * 无访问权限
     */
    PERMISSION_NO_ACCESS(70001, "无访问权限"),
    // -----------------------------------接口错误：70001-79999 end

    ;
    private Integer code;

    private String message;

    ResponseCode(Integer code, String message) {
        this.code = code;
        this.message = message;
    }

    public Integer code() {
        return this.code;
    }

    public String message() {
        return this.message;
    }

    public static String getMessage(String name) {
        for (ResponseCode item : ResponseCode.values()) {
            if (item.name().equals(name)) {
                return item.message;
            }
        }
        return name;
    }

    public static Integer getCode(String name) {
        for (ResponseCode item : ResponseCode.values()) {
            if (item.name().equals(name)) {
                return item.code;
            }
        }
        return null;
    }

}
